#include<iostream>
using namespace std;
int search_2(int *a, int t,int l, int r)
{
    // 1,朴素的二分查找
    while (l <= r)
    {
        //取中间的值
        int mid = l + (r - l) / 2;
        if (a[mid] < t)
            l = mid + 1;
        else if (a[mid > t])
            l = mid - 1;
        else
            return mid;
    }
    return -1;
}
// 两个万能模板，l_search_2() 是向左找 第一个大于的, r_search_2()是向右找答案，第一个小于的，需要mid+1


// 2.查找左端点
//向左找：大于结果的最小值
//分为的区间[l,mid] [mid+1,r]     
int l_search_2(int *a,int t,int l,int r){
    while(l<r){
        int mid = (l + r) / 2;
        if(a[mid]>=t){
            r = mid;
        }
        else{
            l = mid + 1;
        }
    }
    return a[l];
}
// 3.查找右端点
//向右找：小于结果的最大值
//分为的区间[l,mid-1] [mid,r]      
int r_search_2(int *a, int t, int l,int r){
    while(l<r){
        int mid = (l + r + 1) / 2;
        if(a[mid]<=t){
            l = mid;
        }
        else{
            r = mid - 1;
        }
    }
    return a[l];
} 
int main()
{
    int a[] = {1, 2, 3, 6, 7, 8, 9, 10};
    int n = sizeof(a) / sizeof(int);
    int k = search_2(a, 7, 0, n - 1);


    return 0;
}